// 请求配置
const request = {
  // 请求相关
  url: '/path', //请求URL(必需)
  method: 'get', //请求方法，默认GET
  baseURL: 'http://xxxx/', //请求前置URL，实际请求地址由baseURL和url拼接而成
  headers: {'Key': 'Value'}, //请求头
  auth: { //设置Authorization请求头并覆盖现有的
    key: 'value'
  },
  params: { //请求参数 /xxx/yyy
    key: 'value'
  },
  data: 'key1=value1&key2=value2', //请求参数 ?xxx=yyy
  data: { //请求实体POST
    key: 'value'
  },
  maxBodyLength: 2000, //请求实体的大小
  transformRequest: (data, headers) => { //请求数据发送到服务器之前的处理函数
    // 处理请求数据
    return data;
  },
  timeout: 1000, //请求超时毫秒值
  withCredentials: false, //跨站请求是否使用凭证
  signal: new AbortController().signal, //取消请求
  
  // 响应相关
  responseType: 'json', //响应实体的数据类型，可选类型有text、json(默认)、document、blob和arraybuffer等
  responseEncoding: 'utf8', //响应实体的解码编码，默认utf8[NodeJS]
  maxContentLength: 2000, //响应实体的大小[NodeJS]
  decompress: true, // 响应体是否解压，默认true
  validateStatus: (status) => { //响应状态码过滤器，返回true/null/undefined则被then正常处理，否则返回false被catch错误处理
    return status >= 200 && status < 300;// 默认
  },
  transformResponse: (data) => { //响应数据发送到客户端之前的处理函数
    // 处理响应数据
    return data;
  },
  maxRedirects: 21, //最大重定向数量，默认21[NodeJS]
  beforeRedirect: (options, {headers}) => {
    // 重定向之前的处理函数
  },
  
  // 事件相关
  onUploadProgress: ({loaded, total, progress, bytes, estimated, rate, upload = true}) => {
    // 上传进度的监听函数
  },
  onDownloadProgress: ({loaded, total, progress, bytes, estimated, rate, download = true}) => {
    // 下载进度的监听函数
  },
  
  // 其他
  maxRate: [ //上传和下载大小限制
    100 * 1024, // 100KB/s的上传限制
    100 * 1024, // 100KB/s的下载限制
  ],
};

// 响应结构
const response = {
  data: {}, //响应实体
  status: 200, //响应状态码
  statusText: 'OK', //响应状态提示
  headers: {}, //响应头
  config: {}, //Axios请求配置
  request: {} //请求实例，XMLHttpRequest实例或NodeJS重定向后的最后一个请求的实例
};